/*
 * AceptadorClientes.h
 *
 *  Created on: 17/10/2011
 *      Author: guido
 */

#ifndef ACEPTADORCLIENTES_H_
#define ACEPTADORCLIENTES_H_

class AceptadorClientes : public Thread {
public:
	AceptadorClientes(Servidor* servidor) {
		this->servidor = servidor;
	}
	~AceptadorClientes() {

	}
	void run() {
		while (servidor->seguirAceptando) {
			Socket* cliente = new Socket(servidor->socket.aceptar());
			if (cliente->valido()) {
				threads.push_back(new ComunicadorCliente);
			}
			limpiarThreads();
		}
	}
	void limpiarThreads() {
		std::list<Thread*>::iterator it = threads.begin();
		while (	it != threads.end()) {
			if (!((*it)->isAlive())) {
				Thread* temp = *it;
				threads.erase(it++);
				temp->esperarFin();
				delete temp;
			}
			else {
				++it;
			}
		}
	}
private:
	Servidor* servidor;
	std::list<Thread*> threads;
};


#endif /* ACEPTADORCLIENTES_H_ */
